/**
 * AES/ECB/PKCS5Padding 加密
 * @param {string} plaintext - 需要加密的明文
 * @param {string} key - 加密密钥（16/24/32 字节）
 * @returns {Promise<string>} - 返回 Base64 编码的密文
 */

const key = "d8d73c9f91ad4fc689cf1dac563dc906"; // 你的 AES 密钥

export async function aesEcbEncrypt(plaintext, key) {
    // 将密钥转换为 Uint8Array
    const keyBytes = new TextEncoder().encode(key);

    // 导入密钥
    const cryptoKey = await crypto.subtle.importKey(
        "raw", // 密钥格式
        keyBytes, // 密钥数据
        { name: "AES-CBC" }, 
        false, // 是否可导出
        ["encrypt"] // 密钥用途
    );

    // 将明文转换为 Uint8Array
    const plaintextBytes = new TextEncoder().encode(plaintext);

    // 使用 CBC 模式加密（模拟 ECB）
    // 在 ECB 模式下，IV 是全零
    const iv = new Uint8Array(16); // 16 字节的零 IV
    const encrypted = await crypto.subtle.encrypt(
        { name: "AES-CBC", iv }, // 加密参数
        cryptoKey, // 密钥
        plaintextBytes // 明文数据
    );

    // 将加密结果转换为 Base64 编码
    return btoa(String.fromCharCode(...new Uint8Array(encrypted)));
}

/**
 * AES/ECB/PKCS5Padding 解密
 * @param {string} ciphertext - 需要解密的密文（Base64 编码）
 * @param {string} key - 解密密钥（16/24/32 字节）
 * @returns {Promise<string>} - 返回解密后的明文
 */
async function aesEcbDecrypt(ciphertext, key) {
    // 将密钥转换为 Uint8Array
    const keyBytes = new TextEncoder().encode(key);

    // 导入密钥
    const cryptoKey = await crypto.subtle.importKey(
        "raw", // 密钥格式
        keyBytes, // 密钥数据
        { name: "AES-CBC" },
        false, // 是否可导出
        ["decrypt"] // 密钥用途
    );

    // 将 Base64 编码的密文转换为 Uint8Array
    const ciphertextBytes = Uint8Array.from(atob(ciphertext), c => c.charCodeAt(0));

    // 使用 CBC 模式解密（模拟 ECB）
    // 在 ECB 模式下，IV 是全零
    const iv = new Uint8Array(16); // 16 字节的零 IV
    const decrypted = await crypto.subtle.decrypt(
        { name: "AES-CBC", iv }, // 解密参数
        cryptoKey, // 密钥
        ciphertextBytes // 密文数据
    );

    // 将解密结果转换为字符串
    return new TextDecoder().decode(decrypted);
}


